/**
 * 递归移除对象中的 start、end 和 loc 字段
 * @param obj 要处理的对象
 * @returns 处理后的对象
 */
export function removeLocationFields(obj: any): any {
  // 如果是数组，递归处理每个元素
  if (Array.isArray(obj)) {
    return obj.map((item) => removeLocationFields(item));
  }

  // 如果是对象，递归处理每个属性
  if (obj && typeof obj === 'object') {
    const result: any = {};
    for (const key in obj) {
      // 跳过 start、end 和 loc 字段
      if (key === 'start' || key === 'end' || key === 'loc') {
        continue;
      }
      result[key] = removeLocationFields(obj[key]);
    }
    return result;
  }

  // 如果是基本类型，直接返回
  return obj;
}

// 使用示例
const ast = {
  type: 'Program',
  start: 0,
  end: 100,
  loc: {
    start: { line: 1, column: 0 },
    end: { line: 10, column: 0 },
  },
  body: [
    {
      type: 'ExpressionStatement',
      start: 0,
      end: 50,
      loc: {
        start: { line: 1, column: 0 },
        end: { line: 5, column: 0 },
      },
      expression: {
        type: 'CallExpression',
        start: 0,
        end: 40,
        loc: {
          start: { line: 1, column: 0 },
          end: { line: 4, column: 0 },
        },
      },
    },
  ],
};

const cleanedAst = removeLocationFields(ast);
console.log(JSON.stringify(cleanedAst, null, 2));
